/***********************************************
 **** 版权声明处 **
 ****  为了方便阅读和维护，请严格遵守相关代码规范，谢谢   ****
 *******************************************/
package utils
{
	import flash.display.Graphics;

	/*******************************************
	 **** @author huangjixin,@date 2012-7-11, @time 下午3:22:52 **
	 **** 请一句话表述该类主要作用  **
	 *******************************************/
	public class GraphicsUtil
	{
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// private 类私有静态变量和静态常量声明处。（全部大写，使用下划线进行分割）
		// 例如：private static const EXAMPLE:String = "example";
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// public 类公有静态变量和静态常量声明处。（全部大写，使用下划线进行分割）
		// 例如：public static const EXAMPLE:String = "example";
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// private 私有变量声明处，请以“_”开头定义变量
		// 例如：private var _example:String;
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// public 公有变量声明处
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// 构造函数，初始化相关工作可以放在里面
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		public function GraphicsUtil()
		{
		}//构造函数结束
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// getter和setter函数
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// 相关事件响应函数和逻辑函数存放处
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		//drawSector
		public static function  drawSector(graphics:Graphics, x:Number, y:Number, r:Number, R:Number, angle:Number, startA:Number,color:uint=0x000000,alpha:Number=1):void
		{
			graphics.clear();
			
			graphics.lineStyle(1, color, alpha, true);
			
			graphics.beginFill(color, alpha);
			
			if (Math.abs(angle) > 360)
				
			{
				
				angle=360;
				
			}
			
			var n:Number=Math.ceil(Math.abs(angle) / 45);
			
			var angleA:Number=angle / n;
			
			angleA=angleA * Math.PI / 180;
			
			startA=startA * Math.PI / 180;
			
			var startB:Number=startA;
			
			//起始边 
			
			graphics.moveTo(x + r * Math.cos(startA), y + r * Math.sin(startA));
			
			graphics.lineTo(x + R * Math.cos(startA), y + R * Math.sin(startA));
			
			//外圆弧 
			for (var i:int=1; i <= n; i++)
			{
				
				startA+=angleA;
				
				var angleMid1:Number=startA - angleA / 2;
				
				var bx:Number=x + R / Math.cos(angleA / 2) * Math.cos(angleMid1);
				
				var by:Number=y + R / Math.cos(angleA / 2) * Math.sin(angleMid1);
				
				var cx:Number=x + R * Math.cos(startA);
				
				var cy:Number=y + R * Math.sin(startA);
				
				graphics.curveTo(bx, by, cx, cy);
				
			}
			
			//内圆起点 
			
			graphics.lineTo(x + r * Math.cos(startA), y + r * Math.sin(startA));
			
			//内圆弧 
			
			for (var j:int=n; j >= 1; j--)
				
			{
				
				startA-=angleA;
				
				var angleMid2:Number=startA + angleA / 2;
				
				var bx2:Number=x + r / Math.cos(angleA / 2) * Math.cos(angleMid2);
				
				var by2:Number=y + r / Math.cos(angleA / 2) * Math.sin(angleMid2);
				
				var cx2:Number=x + r * Math.cos(startA);
				
				var cy2:Number=y + r * Math.sin(startA);
				
				graphics.curveTo(bx2, by2, cx2, cy2);
				
			}
			
			//内圆终点 
			
			graphics.lineTo(x + r * Math.cos(startB), y + r * Math.sin(startB));
			//完成 
			graphics.endFill();
		}
		
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		// override 覆盖函数
		//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	}//类结束
}//包结束